package main

import (
	"github.com/lxn/walk"
)

const (
	DIR_ORIGIN = iota
	DIR_UP
	DIR_DOWN
	DIR_LEFT
	DIR_RIGHT
	DIR_UP_LEFT
	DIR_UP_RIGHT
	DIR_DOWN_LEFT
	DIR_DOWN_RIGHT
)

type node struct {
	Index, X, Y int
	F           float64 //消耗的总代价
	G           float64 //从起点 A 移动到指定方格的移动代价 自身的代价
	H           float64 //从指定的方格移动到终点 B 的估算成本 距离的代价
	Walkable    bool
}

//节点
type Node struct {
	node
	Parent node
}

//创建一个点
func NewNode(x, y int) *Node {
	r := &Node{}
	r.X = x
	r.Y = y
	r.Walkable = true
	return r
}

type ListAttr struct {
	IsExist bool
	*Node
}

//列表
type List struct {
	Cols, Rows int
	Length     int
	Value      [][]*ListAttr
	NowPoint   [][]int
}

//列表添加
func (this *List) Add(node *Node) {

}

//获取
func (this *List) Get(x, y int) *ListAttr {
	if x < 0 || x >= this.Cols || y < 0 || y > this.Rows {
		return &ListAttr{}
	}
	return this.Value[x][y]
}

//判断是否存在
func (this *List) Contains(x, y int) bool {
	if x < 0 || x >= this.Cols || y < 0 || y > this.Rows {
		return false
	}
	return this.Value[x][y].IsExist
}

//文字体
type TextBody struct {
	family, text string
	pointSize    int
	style        walk.FontStyle
	textFormat   walk.DrawTextFormat
	color        walk.Color
	preRectangle walk.Rectangle
}

//主窗体
type MyMainWindow struct {
	*walk.MainWindow
	paintWidget    *walk.CustomWidget //自定义部件
	canvas         *walk.Canvas       //画布
	grid           *Grids             //画布的所有坐标点
	startX, startY int                //加载完窗体默认起始坐标
	endX, endY     int                //加载完窗体默认结束坐标
	textBody       *TextBody          //文字体
}

//样式体
type Body struct {
	color walk.Color    //颜色
	style walk.PenStyle //样式
	width int           //宽度
}
